Micron Document
🎖️GitЯра🎖️


Displaying Raw • Download

feature/settings/src/commonTest/kotlin/org/meshtastic/feature/settings/SettingsViewModelTest.kt a11dee42a707b024033e16b802f014966aad0b89 (a11dee42) Text, 10.62 KB

T8b949e/*
* Copyright (c) 2025-2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.feature.settings

Tff7b72import T7ee787app.cash.turbine.test
Tff7b72import T7ee787dev.mokkery.MockMode
Tff7b72import T7ee787dev.mokkery.answering.returns
Tff7b72import T7ee787dev.mokkery.every
Tff7b72import T7ee787dev.mokkery.mock
Tff7b72import T7ee787io.kotest.matchers.ints.shouldBeInRange
Tff7b72import T7ee787io.kotest.matchers.shouldBe
Tff7b72import T7ee787io.kotest.property.Arb
Tff7b72import T7ee787io.kotest.property.arbitrary.int
Tff7b72import T7ee787io.kotest.property.checkAll
Tff7b72import T7ee787kotlinx.coroutines.Dispatchers
Tff7b72import T7ee787kotlinx.coroutines.ExperimentalCoroutinesApi
Tff7b72import T7ee787kotlinx.coroutines.flow.MutableStateFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.flowOf
Tff7b72import T7ee787kotlinx.coroutines.test.UnconfinedTestDispatcher
Tff7b72import T7ee787kotlinx.coroutines.test.resetMain
Tff7b72import T7ee787kotlinx.coroutines.test.runCurrent
Tff7b72import T7ee787kotlinx.coroutines.test.runTest
Tff7b72import T7ee787kotlinx.coroutines.test.setMain
Tff7b72import T7ee787org.meshtastic.core.common.BuildConfigProvider
Tff7b72import T7ee787org.meshtastic.core.domain.usecase.settings.ExportDataUseCase
Tff7b72import T7ee787org.meshtastic.core.domain.usecase.settings.IsOtaCapableUseCase
Tff7b72import T7ee787org.meshtastic.core.domain.usecase.settings.MeshLocationUseCase
Tff7b72import T7ee787org.meshtastic.core.domain.usecase.settings.SetAppIntroCompletedUseCase
Tff7b72import T7ee787org.meshtastic.core.domain.usecase.settings.SetDatabaseCacheLimitUseCase
Tff7b72import T7ee787org.meshtastic.core.domain.usecase.settings.SetLocaleUseCase
Tff7b72import T7ee787org.meshtastic.core.domain.usecase.settings.SetMeshLogSettingsUseCase
Tff7b72import T7ee787org.meshtastic.core.domain.usecase.settings.SetNotificationSettingsUseCase
Tff7b72import T7ee787org.meshtastic.core.domain.usecase.settings.SetProvideLocationUseCase
Tff7b72import T7ee787org.meshtastic.core.domain.usecase.settings.SetThemeUseCase
Tff7b72import T7ee787org.meshtastic.core.model.ConnectionState
Tff7b72import T7ee787org.meshtastic.core.repository.FileService
Tff7b72import T7ee787org.meshtastic.core.repository.RadioConfigRepository
Tff7b72import T7ee787org.meshtastic.core.testing.FakeAppPreferences
Tff7b72import T7ee787org.meshtastic.core.testing.FakeDatabaseManager
Tff7b72import T7ee787org.meshtastic.core.testing.FakeMeshLogRepository
Tff7b72import T7ee787org.meshtastic.core.testing.FakeNodeRepository
Tff7b72import T7ee787org.meshtastic.core.testing.FakeNotificationPrefs
Tff7b72import T7ee787org.meshtastic.core.testing.FakeRadioController
Tff7b72import T7ee787org.meshtastic.core.testing.TestDataFactory
Tff7b72import T7ee787org.meshtastic.proto.LocalConfig
Tff7b72import T7ee787kotlin.test.AfterTest
Tff7b72import T7ee787kotlin.test.BeforeTest
Tff7b72import T7ee787kotlin.test.Test
Tff7b72import T7ee787kotlin.test.assertEquals
Tff7b72import T7ee787kotlin.test.assertNotNull

Tf0883e@OptInTb4b4b4(Te6edf3ExperimentalCoroutinesApiTff7b72::Te6edf3classTb4b4b4)
Tff7b72class T56d364SettingsViewModelTest Tb4b4b4{

Tff7b72private Tff7b72val Te6edf3testDispatcher Tff7b72= Te6edf3UnconfinedTestDispatcherTb4b4b4(Tb4b4b4)
Tff7b72private Tff7b72lateinit Tff7b72var Te6edf3viewModelTb4b4b4: Te6edf3SettingsViewModel
Tff7b72private Tff7b72lateinit Tff7b72var Te6edf3nodeRepositoryTb4b4b4: Te6edf3FakeNodeRepository
Tff7b72private Tff7b72lateinit Tff7b72var Te6edf3radioControllerTb4b4b4: Te6edf3FakeRadioController
Tff7b72private Tff7b72lateinit Tff7b72var Te6edf3appPreferencesTb4b4b4: Te6edf3FakeAppPreferences
Tff7b72private Tff7b72lateinit Tff7b72var Te6edf3meshLogRepositoryTb4b4b4: Te6edf3FakeMeshLogRepository
Tff7b72private Tff7b72lateinit Tff7b72var Te6edf3databaseManagerTb4b4b4: Te6edf3FakeDatabaseManager
Tff7b72private Tff7b72lateinit Tff7b72var Te6edf3notificationPrefsTb4b4b4: Te6edf3FakeNotificationPrefs
Tff7b72private Tff7b72val Te6edf3radioConfigRepositoryTb4b4b4: Te6edf3RadioConfigRepository Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3buildConfigProviderTb4b4b4: Te6edf3BuildConfigProvider Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3fileServiceTb4b4b4: Te6edf3FileService Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)

Tf0883e@BeforeTest
Tff7b72fun Td2a8ffsetUpTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3DispatchersTb4b4b4.Te6edf3setMainTb4b4b4(Te6edf3testDispatcherTb4b4b4)
Te6edf3nodeRepository Tff7b72= Te6edf3FakeNodeRepositoryTb4b4b4(Tb4b4b4)
Te6edf3radioController Tff7b72= Te6edf3FakeRadioControllerTb4b4b4(Tb4b4b4)
Te6edf3appPreferences Tff7b72= Te6edf3FakeAppPreferencesTb4b4b4(Tb4b4b4)
Te6edf3meshLogRepository Tff7b72= Te6edf3FakeMeshLogRepositoryTb4b4b4(Tb4b4b4)
Te6edf3databaseManager Tff7b72= Te6edf3FakeDatabaseManagerTb4b4b4(Tb4b4b4)
Te6edf3notificationPrefs Tff7b72= Te6edf3FakeNotificationPrefsTb4b4b4(Tb4b4b4)

Te6edf3every Tb4b4b4{ Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3localConfigFlow Tb4b4b4} Te6edf3returns Te6edf3MutableStateFlowTb4b4b4(Te6edf3LocalConfigTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3every Tb4b4b4{ Te6edf3buildConfigProviderTb4b4b4.Te6edf3versionName Tb4b4b4} Te6edf3returns Ta5d6ff"Ta5d6ff3.0.0-testTa5d6ff"

Tff7b72val Te6edf3isOtaCapableUseCaseTb4b4b4: Te6edf3IsOtaCapableUseCase Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Te6edf3every Tb4b4b4{ Te6edf3isOtaCapableUseCaseTb4b4b4(Tb4b4b4) Tb4b4b4} Te6edf3returns Te6edf3flowOfTb4b4b4(Tff7b72trueTb4b4b4)

Tff7b72val Te6edf3uiPrefs Tff7b72= Te6edf3appPreferencesTb4b4b4.Te6edf3ui
Tff7b72val Te6edf3setThemeUseCase Tff7b72= Te6edf3SetThemeUseCaseTb4b4b4(Te6edf3uiPrefsTb4b4b4)
Tff7b72val Te6edf3setLocaleUseCase Tff7b72= Te6edf3SetLocaleUseCaseTb4b4b4(Te6edf3uiPrefsTb4b4b4)
Tff7b72val Te6edf3setAppIntroCompletedUseCase Tff7b72= Te6edf3SetAppIntroCompletedUseCaseTb4b4b4(Te6edf3uiPrefsTb4b4b4)
Tff7b72val Te6edf3setProvideLocationUseCase Tff7b72= Te6edf3SetProvideLocationUseCaseTb4b4b4(Te6edf3uiPrefsTb4b4b4)
Tff7b72val Te6edf3setDatabaseCacheLimitUseCase Tff7b72= Te6edf3SetDatabaseCacheLimitUseCaseTb4b4b4(Te6edf3databaseManagerTb4b4b4)
Tff7b72val Te6edf3setMeshLogSettingsUseCase Tff7b72= Te6edf3SetMeshLogSettingsUseCaseTb4b4b4(Te6edf3meshLogRepositoryTb4b4b4, Te6edf3appPreferencesTb4b4b4.Te6edf3meshLogTb4b4b4)
Tff7b72val Te6edf3setNotificationSettingsUseCase Tff7b72= Te6edf3SetNotificationSettingsUseCaseTb4b4b4(Te6edf3notificationPrefsTb4b4b4)
Tff7b72val Te6edf3meshLocationUseCase Tff7b72= Te6edf3MeshLocationUseCaseTb4b4b4(Te6edf3radioControllerTb4b4b4)
Tff7b72val Te6edf3exportDataUseCase Tff7b72= Te6edf3ExportDataUseCaseTb4b4b4(Te6edf3nodeRepositoryTb4b4b4, Te6edf3meshLogRepositoryTb4b4b4)

Te6edf3viewModel Tff7b72=
Te6edf3SettingsViewModelTb4b4b4(
Te6edf3radioConfigRepository Tff7b72= Te6edf3radioConfigRepositoryTb4b4b4,
Te6edf3radioController Tff7b72= Te6edf3radioControllerTb4b4b4,
Te6edf3nodeRepository Tff7b72= Te6edf3nodeRepositoryTb4b4b4,
Te6edf3uiPrefs Tff7b72= Te6edf3uiPrefsTb4b4b4,
Te6edf3buildConfigProvider Tff7b72= Te6edf3buildConfigProviderTb4b4b4,
Te6edf3databaseManager Tff7b72= Te6edf3databaseManagerTb4b4b4,
Te6edf3meshLogPrefs Tff7b72= Te6edf3appPreferencesTb4b4b4.Te6edf3meshLogTb4b4b4,
Te6edf3notificationPrefs Tff7b72= Te6edf3notificationPrefsTb4b4b4,
Te6edf3setThemeUseCase Tff7b72= Te6edf3setThemeUseCaseTb4b4b4,
Te6edf3setLocaleUseCase Tff7b72= Te6edf3setLocaleUseCaseTb4b4b4,
Te6edf3setAppIntroCompletedUseCase Tff7b72= Te6edf3setAppIntroCompletedUseCaseTb4b4b4,
Te6edf3setProvideLocationUseCase Tff7b72= Te6edf3setProvideLocationUseCaseTb4b4b4,
Te6edf3setDatabaseCacheLimitUseCase Tff7b72= Te6edf3setDatabaseCacheLimitUseCaseTb4b4b4,
Te6edf3setMeshLogSettingsUseCase Tff7b72= Te6edf3setMeshLogSettingsUseCaseTb4b4b4,
Te6edf3setNotificationSettingsUseCase Tff7b72= Te6edf3setNotificationSettingsUseCaseTb4b4b4,
Te6edf3meshLocationUseCase Tff7b72= Te6edf3meshLocationUseCaseTb4b4b4,
Te6edf3exportDataUseCase Tff7b72= Te6edf3exportDataUseCaseTb4b4b4,
Te6edf3isOtaCapableUseCase Tff7b72= Te6edf3isOtaCapableUseCaseTb4b4b4,
Te6edf3fileService Tff7b72= Te6edf3fileServiceTb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tf0883e@AfterTest
Tff7b72fun Td2a8fftearDownTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3DispatchersTb4b4b4.Te6edf3resetMainTb4b4b4(Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8fftestInitializationTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertNotNullTb4b4b4(Te6edf3viewModelTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ff3.0.0-testTa5d6ff"Tb4b4b4, Te6edf3viewModelTb4b4b4.Te6edf3appVersionNameTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`isConnected flow emits updates using Turbine`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3viewModelTb4b4b4.Te6edf3isConnectedTb4b4b4.Te6edf3test Tb4b4b4{
Te6edf3expectMostRecentItemTb4b4b4(Tb4b4b4) Te6edf3shouldBe Tff7b72true T8b949e// Default in FakeRadioController is Connected (true)

Te6edf3radioControllerTb4b4b4.Te6edf3setConnectionStateTb4b4b4(Te6edf3ConnectionStateTb4b4b4.Te6edf3DisconnectedTb4b4b4)
Te6edf3runCurrentTb4b4b4(Tb4b4b4)
Te6edf3expectMostRecentItemTb4b4b4(Tb4b4b4) Te6edf3shouldBe Tff7b72false

Te6edf3radioControllerTb4b4b4.Te6edf3setConnectionStateTb4b4b4(Te6edf3ConnectionStateTb4b4b4.Te6edf3ConnectedTb4b4b4)
Te6edf3runCurrentTb4b4b4(Tb4b4b4)
Te6edf3expectMostRecentItemTb4b4b4(Tb4b4b4) Te6edf3shouldBe Tff7b72true
Te6edf3cancelAndIgnoreRemainingEventsTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`isOtaCapable flow works`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3viewModelTb4b4b4.Te6edf3isOtaCapableTb4b4b4.Te6edf3test Tb4b4b4{
Te6edf3expectMostRecentItemTb4b4b4(Tb4b4b4) Te6edf3shouldBe Tff7b72true
Te6edf3cancelAndIgnoreRemainingEventsTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`notification settings update prefs`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3viewModelTb4b4b4.Te6edf3setMessagesEnabledTb4b4b4(Tff7b72falseTb4b4b4)
Te6edf3notificationPrefsTb4b4b4.Te6edf3messagesEnabledTb4b4b4.Te6edf3value Te6edf3shouldBe Tff7b72false

Te6edf3viewModelTb4b4b4.Te6edf3setNodeEventsEnabledTb4b4b4(Tff7b72falseTb4b4b4)
Te6edf3notificationPrefsTb4b4b4.Te6edf3nodeEventsEnabledTb4b4b4.Te6edf3value Te6edf3shouldBe Tff7b72false

Te6edf3viewModelTb4b4b4.Te6edf3setLowBatteryEnabledTb4b4b4(Tff7b72falseTb4b4b4)
Te6edf3notificationPrefsTb4b4b4.Te6edf3lowBatteryEnabledTb4b4b4.Te6edf3value Te6edf3shouldBe Tff7b72false
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`mesh log logging setting updates prefs`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3viewModelTb4b4b4.Te6edf3setMeshLogLoggingEnabledTb4b4b4(Tff7b72falseTb4b4b4)
Te6edf3appPreferencesTb4b4b4.Te6edf3meshLogTb4b4b4.Te6edf3loggingEnabledTb4b4b4.Te6edf3value Te6edf3shouldBe Tff7b72false

Te6edf3viewModelTb4b4b4.Te6edf3setMeshLogLoggingEnabledTb4b4b4(Tff7b72trueTb4b4b4)
Te6edf3appPreferencesTb4b4b4.Te6edf3meshLogTb4b4b4.Te6edf3loggingEnabledTb4b4b4.Te6edf3value Te6edf3shouldBe Tff7b72true
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`unlockExcludedModules updates state`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3viewModelTb4b4b4.Te6edf3excludedModulesUnlockedTb4b4b4.Te6edf3value Te6edf3shouldBe Tff7b72false
Te6edf3viewModelTb4b4b4.Te6edf3unlockExcludedModulesTb4b4b4(Tb4b4b4)
Te6edf3viewModelTb4b4b4.Te6edf3excludedModulesUnlockedTb4b4b4.Te6edf3value Te6edf3shouldBe Tff7b72true
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`provideLocation flows based on current node`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3myNodeNum Tff7b72= T79c0ff4T79c0ff5T79c0ff6
Te6edf3nodeRepositoryTb4b4b4.Te6edf3setMyNodeInfoTb4b4b4(Te6edf3TestDataFactoryTb4b4b4.Te6edf3createMyNodeInfoTb4b4b4(Te6edf3myNodeNum Tff7b72= Te6edf3myNodeNumTb4b4b4)Tb4b4b4)
Te6edf3runCurrentTb4b4b4(Tb4b4b4)

Te6edf3viewModelTb4b4b4.Te6edf3provideLocationTb4b4b4.Te6edf3test Tb4b4b4{
Te6edf3expectMostRecentItemTb4b4b4(Tb4b4b4) Te6edf3shouldBe Tff7b72true T8b949e// Default in FakeUiPrefs is true

Te6edf3appPreferencesTb4b4b4.Te6edf3uiTb4b4b4.Te6edf3setShouldProvideNodeLocationTb4b4b4(Te6edf3myNodeNumTb4b4b4, Tff7b72falseTb4b4b4)
Te6edf3runCurrentTb4b4b4(Tb4b4b4)
Te6edf3expectMostRecentItemTb4b4b4(Tb4b4b4) Te6edf3shouldBe Tff7b72false
Te6edf3cancelAndIgnoreRemainingEventsTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`meshLocationUseCase calls work`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3viewModelTb4b4b4.Te6edf3startProvidingLocationTb4b4b4(Tb4b4b4)
Te6edf3radioControllerTb4b4b4.Te6edf3startProvideLocationCalled Te6edf3shouldBe Tff7b72true

Te6edf3viewModelTb4b4b4.Te6edf3stopProvidingLocationTb4b4b4(Tb4b4b4)
Te6edf3radioControllerTb4b4b4.Te6edf3stopProvideLocationCalled Te6edf3shouldBe Tff7b72true
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`test property based bounds for mesh log retention days`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3checkAllTb4b4b4(Te6edf3ArbTb4b4b4.Te6edf3intTb4b4b4(Tff7b72-T79c0ff1T79c0ff0T79c0ff0Tb4b4b4, T79c0ff5T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4) Tb4b4b4{ Te6edf3input Tff7b72-Tff7b72>
Te6edf3viewModelTb4b4b4.Te6edf3setMeshLogRetentionDaysTb4b4b4(Te6edf3inputTb4b4b4)
Te6edf3viewModelTb4b4b4.Te6edf3meshLogRetentionDaysTb4b4b4.Te6edf3value Te6edf3shouldBeInRange Tff7b72-T79c0ff1.Tb4b4b4.T79c0ff3T79c0ff6T79c0ff5
Tb4b4b4}
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`setTheme updates prefs`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3viewModelTb4b4b4.Te6edf3setThemeTb4b4b4(T79c0ff2Tb4b4b4)
Te6edf3appPreferencesTb4b4b4.Te6edf3uiTb4b4b4.Te6edf3themeTb4b4b4.Te6edf3value Te6edf3shouldBe T79c0ff2
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`setLocale updates prefs`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3viewModelTb4b4b4.Te6edf3setLocaleTb4b4b4(Ta5d6ff"Ta5d6fffrTa5d6ff"Tb4b4b4)
Te6edf3appPreferencesTb4b4b4.Te6edf3uiTb4b4b4.Te6edf3localeTb4b4b4.Te6edf3value Te6edf3shouldBe Ta5d6ff"Ta5d6fffrTa5d6ff"
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`showAppIntro updates prefs`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3viewModelTb4b4b4.Te6edf3showAppIntroTb4b4b4(Tb4b4b4)
Te6edf3appPreferencesTb4b4b4.Te6edf3uiTb4b4b4.Te6edf3appIntroCompletedTb4b4b4.Te6edf3value Te6edf3shouldBe Tff7b72false
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`setProvideLocation updates prefs for current node`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3myNodeNum Tff7b72= T79c0ff1T79c0ff2T79c0ff3
Te6edf3nodeRepositoryTb4b4b4.Te6edf3setMyNodeInfoTb4b4b4(Te6edf3TestDataFactoryTb4b4b4.Te6edf3createMyNodeInfoTb4b4b4(Te6edf3myNodeNum Tff7b72= Te6edf3myNodeNumTb4b4b4)Tb4b4b4)

Te6edf3viewModelTb4b4b4.Te6edf3setProvideLocationTb4b4b4(Tff7b72trueTb4b4b4)
Te6edf3appPreferencesTb4b4b4.Te6edf3uiTb4b4b4.Te6edf3shouldProvideNodeLocationTb4b4b4(Te6edf3myNodeNumTb4b4b4)Tb4b4b4.Te6edf3value Te6edf3shouldBe Tff7b72true

Te6edf3viewModelTb4b4b4.Te6edf3setProvideLocationTb4b4b4(Tff7b72falseTb4b4b4)
Te6edf3appPreferencesTb4b4b4.Te6edf3uiTb4b4b4.Te6edf3shouldProvideNodeLocationTb4b4b4(Te6edf3myNodeNumTb4b4b4)Tb4b4b4.Te6edf3value Te6edf3shouldBe Tff7b72false
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`setDbCacheLimit updates manager`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3viewModelTb4b4b4.Te6edf3setDbCacheLimitTb4b4b4(T79c0ff2T79c0ff0T79c0ff0Tb4b4b4)
Te6edf3databaseManagerTb4b4b4.Te6edf3cacheLimitTb4b4b4.Te6edf3value Te6edf3shouldBe T79c0ff1T79c0ff0 T8b949e// Clamped to MAX_CACHE_LIMIT
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.2 - Generated in 0.05s